home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 132_01 / pass0.c < prev    next >
Text File  |  1985-08-19  |  3KB  |  113 lines

  1. pass0(mptr,pgptr,pscrn)
  2. int *mptr,*pgptr,*pscrn;
  3. {
  4. int *mscan,*pgscan;
  5. int    mflag,pgflag;
  6.     mscan=mptr;
  7.     pgscan =pgptr;
  8.     while(mscan[FORWARD] != NULL) {
  9.         if(pgscan[FORWARD] == NULL ) break;
  10. /*
  11.     Test for a new object definition in the master list.
  12.     If not blanked, erase and flag for rewrite
  13.     Copy the pointer to the page list.
  14. */
  15.     if(mscan[OBJPTR] != pgscan[OBJPTR]) {
  16.         new(mscan,pgscan,pscrn,pgptr);
  17.         mscan = mscan[FORWARD];
  18.         pgscan = pgscan[FORWARD];
  19.         continue;
  20.     }
  21. /*
  22.     Test for a move of mlist object relative to pglist
  23. */
  24.     if(mscan[X] == pgscan[X] ) { 
  25.         if(mscan[Y] == pgscan[Y]) {
  26. /*
  27.     Object has not moved to here
  28. */
  29.             fixed(mscan,pgscan,pscrn,pgptr);
  30.             mscan = mscan[FORWARD];
  31.             pgscan = pgscan[FORWARD];
  32.             continue;
  33.         }
  34.     }
  35. /*
  36.         object has moved to here
  37. */
  38.         moved(mscan,pgscan,pscrn,pgptr);
  39.         mscan = mscan[FORWARD];
  40.         pgscan = pgscan[FORWARD];
  41.     }
  42. }
  43. new(mptr,pgptr,screen,ptop)
  44. int    *mptr,*pgptr,*screen,*ptop;
  45. {
  46. int    mflag,pgflag;
  47.     pgflag=pgptr[FLAGS];
  48.     mflag =mptr[FLAGS];
  49.     if((mflag & BLANKED) == 0) { /* mlist object is on */
  50.         if((pgflag & BLANKED) == 0) { /* pglist obj is on */
  51.           eraseobj(screen,NBYTES,pgptr[X],pgptr[Y],pgptr[OBJPTR]);
  52.             pgflag = pgflag + ERASE;
  53.             rewrite(pgptr,ptop);
  54.         }
  55.         pgflag = pgflag + WRITE ;
  56.     }
  57.     pgptr[FLAGS] = pgflag;
  58.     pgptr[OBJPTR]=mptr[OBJPTR];
  59. }
  60. /*
  61.     fixed    sets the erases and sets for write those objects
  62.     which are both the same and have not moved relative to the
  63.     master list.
  64. */
  65. fixed(mscan,pgscan,pscrn,pgptr)
  66. int    *mscan,*pgscan,*pscrn,*pgptr;
  67. {
  68. int    mflag,pgflag;
  69.     mflag    = mscan[FLAGS];
  70.     pgflag    = pgscan[FLAGS];
  71.     if((mflag&BLANKED)==0){ /* mlist object is on */
  72.         if(pgflag&BLANKED) {
  73.             pgflag=(pgflag&(~BLANKED))+WRITE;
  74.         }
  75.     }
  76.         /* mlist is blanked, test pglist */
  77.     else     if((pgflag&BLANKED)==0) {
  78.             pgflag=pgflag+BLANKED+ERASE;
  79.             eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  80.             rewrite(pgscan,pgptr);
  81.         }
  82.     pgscan[FLAGS]=pgflag;
  83. }
  84. /*
  85.     moved     erases and flags for re-write those objects which
  86.     have moved relative to the master list.
  87. */
  88. moved(mscan,pgscan,pscrn,pgptr)
  89. int    *mscan,*pgscan,*pscrn,*pgptr;
  90. {
  91. int    pgflag,mflag;
  92.     pgflag    =pgscan[FLAGS];
  93.     mflag    = mscan[FLAGS];
  94.     if((mflag&BLANKED) ==0) { /* object is on */
  95.         if(pgflag&BLANKED) { /* list object off */
  96.             pgflag=(pgflag&(~BLANKED))+MOVER+WRITE;
  97.         }
  98.         else {    pgflag=pgflag+MOVER+WRITE+ERASE;
  99.             eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  100.             rewrite(pgscan,pgptr);
  101.              }
  102.     }
  103.         /* mlist object is off */
  104.     else    if((pgflag&BLANKED)==0) { /* pglist is on */
  105.             pgflag=pgflag+ERASE+BLANKED;
  106.             eraseobj(pscrn,NBYTES,pgscan[X],pgscan[Y],pgscan[OBJPTR]);
  107.             rewrite(pgscan,pgptr);
  108.         }
  109.     pgscan[X]=mscan[X];
  110.     pgscan[Y]=mscan[Y];
  111.     pgscan[FLAGS]=pgflag;
  112. }
  113. can,*pgs